package com.itcz.cli.example;

import picocli.CommandLine;
import picocli.CommandLine.Option;

import java.util.concurrent.Callable;

/**
 * picocli登陆示例模板
 * name 参数：命令行程序名称
 * version 参数：当前命令行程序版本
 * mixinStandardHelpOptions 参数：true表示开启帮助手册
 */
@CommandLine.Command(name = "login", version = "ASCIIArt 1.0", mixinStandardHelpOptions = true)
public class Login implements Callable<Integer> {
    @Option(names = {"-u", "--user"}, description = "User name")
    String user;

    /**
     * 1）names 参数：指定选项英文名称。
     * 2）description 参数：指定描述信息，从而让生成的帮助手册和提示信息更清晰。
     * 3)interactive 参数：true表示开启交互式
     * 4)echo 参数：true表示显示用户的输入（因为jar包运行的命令行模式输入信息时不会显示）
     * 5）prompt 参数：指定引导用户输入的提示语
     * 6)arity 参数：0.。1表示可以接收0个或者1个参数（这样用户既可以在完整命令中直接给选项填充参数，也可以选择交互式输入。）
     */
    @Option(names = {"-p", "--password"}, description = "Passphrase", interactive = true, echo = true, prompt = "请输入密码：", arity = "0..1")
    String password;

    @Option(names = {"-cp", "--checkPassword"}, description = "Check Password", interactive = true, echo = true, prompt = "请确认密码：")
    String checkPassword;

    public Integer call() throws Exception {
        System.out.println("password = " + password);
        System.out.println("checkPassword = " + checkPassword);
        return 0;
    }

    public static void main(String[] args) {
        args = new String[]{"-u", "user123", "-p", "-cp"};
        new CommandLine(new Login()).execute(args);
    }
}
